package com.codemonkey.lq.qd.facotry.config;


import com.codemonkey.lq.qd.ServiceContext;
import com.codemonkey.lq.qd.facotry.config.executer.ActionHandler;


public interface ActionDefinition {
	
	/**
	 * @return 本Action的identity
	 */
	String getName();

	/**
	 * @return 对应于MyBatis中,进行CRUD时的参数statement
	 */
	String getSqlId();

	/**
	 * 	直接取值于 org.apache.ibatis.mapping.SqlCommandType
	 * @return  UNKOWN,SELECT,INSERT,UPDATE,DELETE 其中的一个 (大小写无关) ;
	 */
	String getSqlType();

	/**
	 * @return 数据库操作完成后的返回值,进行存储时的key值
	 */
	String getResult();

	/**
	 * @return list,single ; 用于SELECT时,返回多个值,还是单个值
	 */
	String getResultType();

	/**
	 * @return 用于SELECT时,是否进行分页
	 */
	boolean isPage();

	/**
	 * @return 传递给STATEMENT的参数的Key.因为我们将从一个类似Map<String,Object>的容器中取出数据
	 */
	String getParameter();
	
	/**
	 * @return 用于判断本action是否可执行
	 */
	String getCondition();
	
	/**
	 * @return 扩展点,允许对返回值或传入参数进行处理
	 */
	ActionHandler getHandler();
	
	void execute(ServiceContext serviceContext) throws Exception;
}
